package br.com.esporte.view.site.component.paginacao;

import java.util.List;

import org.apache.wicket.Component;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;

import br.com.esporte.model.EntidadeEsporte;
import br.com.esporte.view.infra.component.ComponenteGenerico;

/**
 * 
 * @author Milton Domingues
 *
 */
public abstract class PaginacaoComponent<ENTIDADE extends EntidadeEsporte> extends ComponenteGenerico {

	private static final long serialVersionUID = -3041310943928809815L;

	private static final String FORM_ID = "form";
	private static final String LIST_PAGINAS_ID = "listPaginas";
	private static final String LINK_ID = "link";
	private static final String LABEL_ID = "label";

	private List<ENTIDADE> entidades;

	public PaginacaoComponent(String id, List<ENTIDADE> entidades) {
		super(id);
		setEntidades(entidades);
		montarComponente();
	}


	public abstract void acaoPagina(ENTIDADE entidade);

	private ListView<ENTIDADE> criarListPaginas(){
		ListView<ENTIDADE> list = new ListView<ENTIDADE>(LIST_PAGINAS_ID, getEntidades()) {

			private static final long serialVersionUID = 1L;

			@SuppressWarnings("unchecked")
			@Override
			protected void populateItem(ListItem<ENTIDADE> item) {
				final ENTIDADE entidade = (ENTIDADE) item.getDefaultModelObject();
				Link<ENTIDADE> link = new Link<ENTIDADE>(LINK_ID) {

					private static final long serialVersionUID = 1L;

					@Override
					public void onClick() {
						acaoPagina(entidade);
					}
				};
				link.add(new Label(LABEL_ID, getLabelPage(entidade)));
				item.add(link);
			}
		};
		return list;
	}

	public List<ENTIDADE> getEntidades() {
		return entidades;
	}

	public abstract String getLabelPage(ENTIDADE entidade);

	@Override
	public void montarComponente() {
		Form<Component> form = new Form<Component>(FORM_ID);
		form.add(criarListPaginas());
		add(form);
	}

	public void setEntidades(List<ENTIDADE> entidades) {
		this.entidades = entidades;
	}

}
